// 管理管理员认证状态的工具函数

// 存储键名
const ADMIN_INFO_KEY = 'adminInfo';

// 会话过期时间(秒)，默认为4小时
const DEFAULT_SESSION_TIMEOUT = 4 * 60 * 60; // 4小时

/**
 * 设置管理员信息到localStorage
 * @param {Object} adminInfo 管理员信息对象
 * @param {number} expiresIn 过期时间(秒)，默认为DEFAULT_SESSION_TIMEOUT
 */
export function setAdminInfo(adminInfo, expiresIn = DEFAULT_SESSION_TIMEOUT) {
  // 计算过期时间
  const expiryTime = new Date();
  expiryTime.setSeconds(expiryTime.getSeconds() + expiresIn);
  
  // 添加过期时间
  const adminInfoWithExpiry = {
    ...adminInfo,
    expiry_time: expiryTime.toISOString()
  };
  
  localStorage.setItem(ADMIN_INFO_KEY, JSON.stringify(adminInfoWithExpiry));
  console.log(`管理员认证信息已保存，将在${new Date(expiryTime).toLocaleString()}过期`);
}

/**
 * 获取管理员信息
 * @returns {Object|null} 管理员信息，如果不存在或已过期则返回null
 */
export function getAdminInfo() {
  const adminInfoStr = localStorage.getItem(ADMIN_INFO_KEY);
  
  if (!adminInfoStr) {
    return null;
  }
  
  try {
    const adminInfo = JSON.parse(adminInfoStr);
    const now = new Date();
    const expiryTime = adminInfo.expiry_time ? new Date(adminInfo.expiry_time) : null;
    
    // 如果信息已过期，移除并返回null
    if (!expiryTime || now >= expiryTime) {
      console.log('管理员认证信息已过期，需要重新登录');
      removeAdminInfo();
      return null;
    }
    
    // 计算剩余时间（分钟）
    const remainingMinutes = Math.floor((expiryTime - now) / 60000);
    console.log(`管理员认证有效，剩余${remainingMinutes}分钟`);
    
    return adminInfo;
  } catch (error) {
    console.error('解析管理员信息失败:', error);
    removeAdminInfo();
    return null;
  }
}

/**
 * 刷新管理员信息的过期时间
 * @param {number} expiresIn 过期时间(秒)，默认为DEFAULT_SESSION_TIMEOUT
 * @returns {boolean} 操作是否成功
 */
export function refreshAdminSession(expiresIn = DEFAULT_SESSION_TIMEOUT) {
  const adminInfo = getAdminInfo();
  
  if (!adminInfo) {
    return false;
  }
  
  // 更新过期时间
  setAdminInfo(adminInfo, expiresIn);
  return true;
}

/**
 * 移除管理员信息
 */
export function removeAdminInfo() {
  localStorage.removeItem(ADMIN_INFO_KEY);
}

/**
 * 获取管理员ID
 * @returns {number|null} 管理员ID，如果不存在则返回null
 */
export function getAdminId() {
  const adminInfo = getAdminInfo();
  return adminInfo ? adminInfo.admin_id : null;
}

/**
 * 获取管理员等级
 * @returns {number|null} 管理员等级，如果不存在则返回null
 */
export function getAdminLevel() {
  const adminInfo = getAdminInfo();
  const level = adminInfo ? adminInfo.admin_level : null;
  
  // 添加更详细的日志输出
  console.log('获取管理员级别:', level);
  console.log('管理员信息详情:', adminInfo);
  
  // 确保即使级别为0也能正确返回，而不被当作假值处理
  if (adminInfo && (level === 0 || level)) {
    return level;
  }
  
  return null;
}

/**
 * 获取管理员名称
 * @returns {string|null} 管理员名称，如果不存在则返回null
 */
export function getAdminName() {
  const adminInfo = getAdminInfo();
  return adminInfo ? adminInfo.admin_name : null;
}

/**
 * 检查管理员是否已认证
 * @returns {boolean} 如果管理员已认证则返回true
 */
export function isAuthenticated() {
  return getAdminInfo() !== null;
}

/**
 * 管理员注销
 */
export function logout() {
  removeAdminInfo();
}

/**
 * 检查管理员是否有权限访问特定角色要求的页面
 * @param {Array} requiredRoles 需要的角色等级数组
 * @returns {boolean} 如果管理员有权访问则返回true
 */
export function hasPermission(requiredRoles) {
  const adminLevel = getAdminLevel();
  
  if (adminLevel === null) {
    console.log('权限检查: 未找到管理员级别');
    return false;
  }
  
  // 0级管理员拥有最高权限，可以访问所有页面
  if (adminLevel === 0) {
    console.log('权限检查: 0级管理员拥有所有权限');
    return true;
  }
  
  const hasAccess = requiredRoles.includes(adminLevel);
  console.log(`权限检查: 级别 ${adminLevel} 访问需要 ${requiredRoles} 的页面, 结果: ${hasAccess}`);
  return hasAccess;
} 